package com.haigirl.keyWord;
/*
   static、final、abstract、interface四大关键字
 
  1 static关键字

  static：是静态的关键字；
  可以修饰的对象:
	方法、语句块、属性【静态属性】；
	
	（1）static修饰方法叫静态方法；
	（2）static修饰符的语句块交静态语句块；【因为执行一次，一般用作初始化处理】
	（3）static修饰的属性叫静态属性，也就类属性；【非static的属性也叫实例属性】
  关键字的特性：
	（1）static修饰的静态方法只能调用静态方法或属性；非静态的方式都可以访问；
	（2）静态的方法或属性可以通过 类名.静态方法 名的方式进行访问；	
	（3）由static修饰的对象是全类所有，全类所有的特点就是可以通过类名直接访问；
	（4）由static修饰的对象是在类被加载到jvm虚拟机的时候就进行分配内存和初始化处理；
		非static的对象是在new时才进行内存分配和初始化；
	（5）由static修饰的对象用于域是全类所有，生命周期是从被jvm加载开始，到程序结束；
	（6）由static修饰的静态语句块在类被jvm加载时执行一次，并且只执行一次；
		非静态的语句块是在new创建实例对象之前执行，并且每次创建时都执行一次；
	（7）静态方法中不能使用this关键字；
	
  注意：
	教材P189页。考点：构造方法、语句块、静态语句块在继承的父子类中执行时的先后顺序；
	* 2 final关键字
	
	final关键字：是终结关键字；
	可以修饰的对象有：
		类、方法、变量（成员变量和局部变量）
	关键字特性：
		（1）由final修饰的类叫终结类，该类不能够被其他类继承；
		（2）由final修饰的方法叫做终结方法，该方法不能够被子类重写；【final方法没有多态】
		（3）由final修饰的变量叫做常量，该变量一旦初始化赋值之后，该值不能够再被修改；
			final修饰的基本类型是指变量的值不能够被修改；
			final修饰的对象类型是指变量的引用地址不能修改，但是变量的内容可以修改；★★★
			final修饰的静态属性叫做静态常量，命名规则是全部大写，并用_分割，静态常量在声明时必须进行初始化；
	代码[com.yuw.oop.finaldemo.*]:
		参见包com.yuw.oop.finaldemo中的代码；
  2 abstract关键字

	abstract关键字是抽象的；
	可以修饰的对象：
		类、方法；
	关键字的特性：
		（1）abstract修饰的类叫抽象类；抽象类不能够被new；抽象类不能够通过new创建实例对象，因为抽象类含有抽象内容比如抽象方法，所以在new时是无法个抽象的部分分配内存的，所以不能new创建实例对象；
		（2）abstract修饰的方法叫抽象方法，抽象方法只有方法声明，没有方法体【普通方法的生命定义去掉{},加上abstract关键字】；
		（3）抽象方法因为没有方法体，需要由子类通过多态的方法来进行重写；如果子没有没有重写父类所有的抽象方法，则子类必须还是一个抽象类；
		（4）含有抽象方法的类一定是抽象类；抽象类不一定要含有抽象方法；抽象类中还可以包含其他非抽象方法；
		
	语法：
		抽象方法的语法：
			访问控制修饰符  abstract  返回值类型 方法名(参数列表);
		课堂问题：
			抽象方法可以同时再使用 static 或者 final修饰么？
	
	抽象类和抽象方法的应用场景：
		（1） 抽象类是对类的更高层次的抽象；
		（2）抽象类主要应用于在当前的需求层次上，还有不能去定的内容（例如，有些行为方法的内容无法定义），这时就可以使用抽象类来进行面向对象的设计；
		（3）抽象类一般将抽象方法推迟到子类中进行实现；
	代码[com.yuw.oop.abstractdemo.*]:
		参见包com.yuw.oop.abstractdemo中的代码；		
  3 interface关键字

  接口的概念和语法 

	interface是接口关键字；
	接口是一组抽象行为的集合体；
	接口也是一种类；
	语法：
		访问控制修饰符  其他修饰符  interface 接口名 {
			接口主体内容；
		}
	解析：
		（1）接口是特殊的抽象类，定义时使用关键字 interface；
		（2）接口的命名规范：I+类命名规范，例如IRunnable;
		（3）接口也不能使用new创建实例对象；
		（4）接口中定义的变量都是公共静态常量，其中 public static final，可以全部或部分省略；
			接口中没有属性，都是公共的静态常量。
		（5）接口中定义方法都是公共的抽象方法，其中 public abstract，可以全部或部分省略；
			接口中没有普通的行为方法，但是有一个新特性，可以使用default关键字定义普通行为方法；
		（6）接口可以实现多继承，主要是为了弥补类与类之间单继承的不足；【类是单继承】
		（7）接口中定义常量和抽象方法都默认是public类型；
		（8）子类如果不能实现接口中所有的抽象方法，则该类还是一个抽象类；
		
接口的多继承：

	接口的多继承主要体现在一下两个方面：
		（1）类与接口之间的多继承
		类可以多继承接口，继承的关键字是 implements ；
			语法：
			... 类名 implements 接口1，接口2，接口n{
			}
		（2）接口与接口之间的多继承
		接口与接口之间可以实现多继承，继承的关键字是 extends；
			语法：
			... 接口名  extends 接口1，接口2，接口n{
			}
		
	代码[com.yuw.oop.interfacedemo.*]:
		参见包com.yuw.oop.interfacedemo中的代码；
		
 软件工程OO原则：面向接口的编程
	
	面向接口的编程；【面向父类的编程】【多态应用】

 课堂作业*：
	
	接口和抽象类的异同点；

 接口的应用场景： 

	接口是一组抽象方法的集合体，接口中定义的是一组行为方法；
	反过来说，
		当前类实现了某个接口就表示该类具有了某些行为能力；
	
	如果只是抽象封装一组行为能力，则优先使用接口；
	如果说在抽象封装一个类时，有部分行为方法无法实现，则使用抽象类；
	
 1.3 设计模式

	设计模式：就是在软件工程对特定问题进行特定的解决，这种解决方案有了通用的名字之后，就是设计模式；
	
 1 单件模式【单例模式】

	单件模式【单例模式】：
		一个类只有唯一的一个实例对象；【从任何地方访问都只能获取同一个唯一的实例对象】
		商城的购物车就是单例模式的一种应用；
		
	单例模式的实现机制：
		（1）创建一个单例模式类的静态属性；【保证常驻内存，任何时候都可以访问到】
		（2）将构造方法私有化；【杜绝外部通过new的方式创建改单例模式类的实例对象】
		（3）提供一个静态的获取该单例模式类实例对象的静态方法【通过类名调用静态方法】
	注意：
		（1）单例模式中的线程安全问题；
		（2）掌握多种单例模式的实现方式。【懒汉模式、饿汉模式】
			参考链接：
				http://cantellow.iteye.com/blog/838473
	代码[com.yuw.oop.singletondemo.*]:
		参见包com.yuw.oop.singletondemo中的代码；
	*/

public class KeyWord {

}
